/*
 * KategorieConfig.java
 *
 * Created on 5. prosinec 2006, 9:14
 *
 */

package cz.results.winter6.model;

import java.util.ArrayList;
import java.util.GregorianCalendar;
import java.util.Iterator;

public class KategorieConfig {
    
    /** nazev kategorie dlouhy */
    private String nazev;
    /** nazev kategorie - zkratka - kratka */
    private String zkratka;
    /** filtr popisuje startovni subjekty, ktere jsou soucasti prislusne kategorie */
    private Filtr filtr;
    /** barva cisel zavodniku */
    private String barvaCisel;
    /** udava ze ktere jizdy se bude brat poradi startovnich subjektu ve startovni listine */
    private int jizdaPoradi;
    /** datum je to stringova polozka, takze se tam muze vyplnit cokoliv takrka, slouzi pro tisk startovni listiny 
     vpravo nahore je typicky pro kategorii*/
    private String datum;
    
    /** pole popisujici startovni casy v ruznych jizdach, filtr je spolecny pro vsechny a v vymezuje ty
     * startovni subjekty, ktere jsou napriklad na jedne strance startovni listiny (jedna tabulka), tyto
     * startovni subjekty mohou startovat ve vice jizdach. a prave toto popisuje toto pole */
    private ArrayList<StartovniCasConfig> startovniCasConfigList;
    
    public KategorieConfig() {
        startovniCasConfigList = new ArrayList<StartovniCasConfig>();
    }
    
    public KategorieConfig(int pocetJizd){
        this();
        inicializaceStartovnichCasu(pocetJizd);
    }
    
    
    /** prida prislusny pocet StartovniCasConfig dany parametrem pocetJizd
     *  !!! chce to upravit, aby to nebylo natvrdo, mozna nejak prejmenovat...) */
    public void inicializaceStartovnichCasu(int pocetJizd){
        for (int i = 1; i <= pocetJizd; i++) {
            StartovniCasConfig scc = new StartovniCasConfig();
            scc.setNazevJizdy("");
            scc.setJizda(i);            
            scc.setInterval(60);
            scc.setStartOd(new GregorianCalendar(2006,5,5,8,0,0));        //!!!!!!!!!!!!!!!!!!!!! upravit NE napevno
            getStartovniCasConfigList().add(scc);
        }
    }
    
    /** vysledkem metody je ze srovna pocet struktur StartovniCasConfig podle parametru pocetJizd 
     *  prida nebo zrusi StartovniCasConfigy, tak aby jich bylo prave jako pocetJizd */
    public void rekonfiguraceStartovnichCasu(int pocetJizd){
        int pocetJizdVPoli = getStartovniCasConfigList().size();
        
        if( pocetJizdVPoli != pocetJizd){             //delam neco jen kdyz pocet zaznamu se nerovna pozadovanemu poctu jizd
            
            if(pocetJizdVPoli > pocetJizd){     
                                                                        
                for (int i = pocetJizdVPoli; i > pocetJizd; i--) {         //ubiram jizdy od konce
                    getStartovniCasConfigList().remove(i-1);
                }
                
            } else {
                    inicializaceStartovnichCasu(pocetJizd-pocetJizdVPoli);
            }
        }
    }
    
    
    public String getNazev() {
        return nazev;
    }
    
    public String getNazevXML(){
        return "<nazev>"+getNazev()+"</nazev>";
    }
    
    public void setNazev(String nazev) {
        this.nazev = nazev;
    }
    
    public String getZkratka() {
        return zkratka;
    }
    
    /** vraci string s daty v xml formatu bez obalovaciho tagu <katg>...</katg> */
    public String getKategorieXML(){
        int i = 1;
        String pom = getNazevXML()+"\n"+ getZkratkaXML()+"\n"+getBarvaCiselXML()+"\n"+getDatumXML()+"\n";
        
        Iterator iterator = getStartovniCasConfigList().iterator();
        
        while(iterator.hasNext()){
            StartovniCasConfig config=(StartovniCasConfig)iterator.next();
            pom = pom + config.getStartCasConfigXML(i++);
        }
        
        return pom;
    }
    
    public String getZkratkaXML(){
        return "<zkratka>"+getZkratka()+"</zkratka>";
    }
    
    public void setZkratka(String zkratka) {
        this.zkratka = zkratka;
    }
    
    public Filtr getFiltr() {
        return filtr;
    }
    
    public void setFiltr(Filtr filtr) {
        this.filtr = filtr;
    }
    
    public String getBarvaCisel() {
        return barvaCisel;
    }
    
    public String getBarvaCiselXML(){
        return "<barvaCisel>"+getBarvaCisel()+"</barvaCisel>";
    }
    
    public void setBarvaCisel(String barvaCisel) {
        this.barvaCisel = barvaCisel;
    }
    
    public ArrayList<StartovniCasConfig> getStartovniCasConfigList() {
        return startovniCasConfigList;
    }
    
    public void setStartovniCasConfigList(ArrayList<StartovniCasConfig> startovniCasConfigList) {
        this.startovniCasConfigList = startovniCasConfigList;
    }
    
    public int getJizdaPoradi() {
        return jizdaPoradi;
    }
    
    public void setJizdaPoradi(int jizdaPoradi) {
        this.jizdaPoradi = jizdaPoradi;
    }

    public String getDatum() {
        return datum;
    }

    public void setDatum(String datum) {
        this.datum = datum;
    }
    
    public String getDatumXML(){
        return "<datum>"+getDatum()+"</datum>";
    }
    
}
